/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * frmPadronElectoral.java
 *
 * Created on 15/06/2011, 07:33:21 PM
 */
package verins.GUI;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileNameExtensionFilter;
import verins.BO.PadronElectoralBO;
import verins.BO.PersonaBO;
import verins.Utils.IOmethods;
import verins.Utils.Mensajes;
import verins.beans.Estadopadron;
import verins.beans.Estadoprocesoelectoral;
import verins.beans.Padronelectoral;
import verins.beans.Padronelectorallinea;
import verins.beans.Paginapadronelectoral;
import verins.beans.PaginapadronelectoralPK;
import verins.beans.Persona;
import verins.beans.Procesoelectoral;
import verins.beans.Usuario;

/**
 *
 * @author jpenam
 */
public class frmPadronElectoral extends javax.swing.JFrame {

    /** Creates new form frmPadronElectoral */
    public Procesoelectoral procesoEle=null;
    public Usuario usuario=null;
    public Padronelectoral padron=null;
    public frmPadronElectoral(JFrame ventana, Usuario usuario , Procesoelectoral  proceso) {
        initComponents();
        procesoEle=proceso;
        this.usuario = usuario;
        verins.Utils.Comunes.centrarVentana(this);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        btnBusqArch = new javax.swing.JButton();
        lblImagen1 = new javax.swing.JLabel();
        txtImagen1 = new javax.swing.JTextField();
        btnAceptar = new javax.swing.JButton();
        btnBucarPadr = new javax.swing.JButton();
        txtPadron = new javax.swing.JTextField();
        lblImagen2 = new javax.swing.JLabel();
        btnCancelar = new javax.swing.JButton();
        txtProceso = new javax.swing.JTextField();
        btnBucarProc = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        btnBusqArch1 = new javax.swing.JButton();
        lblImagen3 = new javax.swing.JLabel();
        txtImagen2 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Carga de Padrones");
        setResizable(false);

        jLabel1.setText("Proceso electoral");

        btnBusqArch.setText("...");
        btnBusqArch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBusqArchActionPerformed(evt);
            }
        });

        lblImagen1.setText("Archivo");

        txtImagen1.setEnabled(false);

        btnAceptar.setText("Cargar ");
        btnAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAceptarActionPerformed(evt);
            }
        });

        btnBucarPadr.setText("...");
        btnBucarPadr.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBucarPadrActionPerformed(evt);
            }
        });

        txtPadron.setEnabled(false);

        lblImagen2.setText("Padron Electoral");

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        txtProceso.setEnabled(false);

        btnBucarProc.setText("...");
        btnBucarProc.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBucarProcActionPerformed(evt);
            }
        });

        jLabel2.setText("Datos de padrón a cargar");

        btnBusqArch1.setText("...");
        btnBusqArch1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBusqArch1ActionPerformed(evt);
            }
        });

        lblImagen3.setText("Datos Digitales");

        txtImagen2.setEnabled(false);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(lblImagen2)
                        .addGap(18, 18, 18)
                        .addComponent(txtPadron, javax.swing.GroupLayout.DEFAULT_SIZE, 406, Short.MAX_VALUE)
                        .addGap(34, 34, 34)
                        .addComponent(btnBucarPadr, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGap(11, 11, 11)
                        .addComponent(txtProceso, javax.swing.GroupLayout.DEFAULT_SIZE, 406, Short.MAX_VALUE)
                        .addGap(34, 34, 34)
                        .addComponent(btnBucarProc, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jLabel2)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(btnAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(btnCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(11, 11, 11)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lblImagen3)
                            .addComponent(lblImagen1))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtImagen2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 407, Short.MAX_VALUE)
                            .addComponent(txtImagen1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 407, Short.MAX_VALUE))
                        .addGap(34, 34, 34)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(btnBusqArch, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnBusqArch1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnBucarProc)
                    .addComponent(txtProceso, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnBucarPadr)
                    .addComponent(lblImagen2)
                    .addComponent(txtPadron, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnBusqArch)
                    .addComponent(txtImagen1, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblImagen1))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnBusqArch1)
                    .addComponent(lblImagen3)
                    .addComponent(txtImagen2, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(65, 65, 65)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCancelar)
                    .addComponent(btnAceptar))
                .addGap(30, 30, 30))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnBusqArchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBusqArchActionPerformed
        JFileChooser fileChooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Text", "txt");
        fileChooser.setFileFilter(filter);
        fileChooser.setCurrentDirectory(new File(verins.Utils.Comunes.getPathPadrones()));
        int status = fileChooser.showOpenDialog(null);
        if (status == JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            txtImagen1.setText(selectedFile.getPath());
            //jPanel1.cargarImagen(txtImagen1.getText());
        } else if (status == JFileChooser.CANCEL_OPTION) {
            txtImagen1.setText("");
        }
}//GEN-LAST:event_btnBusqArchActionPerformed
    
    public boolean leepadron (String ruta,String ruta2){
      File archivo = null;
      FileReader fr = null;
      BufferedReader br = null;
      
      File archivo2 = null;
      FileReader fr2 = null;
      BufferedReader br2 = null;

      try {
         // Apertura del fichero y creacion de BufferedReader para poder
         // hacer una lectura comoda (disponer del metodo readLine()).
         archivo = new File (ruta);
         int tam=ruta.length();
         String nameruta1= ruta;
         nameruta1 = nameruta1.substring(tam-10);
         System.out.println(nameruta1);
         String dire=txtPadron.getText()+".txt";
         System.out.println(dire);
         
         if(!nameruta1.equals(dire)){
             Mensajes.alerta("Padron debe coindicir con Codigo de Padron");
            return false;
         }
         
         fr = new FileReader (archivo);
         br = new BufferedReader(fr);
         
         archivo2 = new File (ruta2);
         fr2 = new FileReader (archivo2);
         br2 = new BufferedReader(fr2);
         
         // Lectura del fichero
         String linea;
         String linea2;
         int cont=0;
         int pagina=1;
         int lineapagina=1;
         String paterno;
         String materno;
         String nombre1;
         String nombre2;
         String DNI;
         String RutaDigital="";
         String imagen="";
         String huella="";
         
         Padronelectoral Padron = padron;
         List<Usuario> ListaDigi = new  ArrayList <Usuario> () ;
         
         ListaDigi =  PersonaBO.findDigitadores();
         
         ArrayList<Persona> ListaDigitadores = new  ArrayList<Persona> ();
               
         for(int i=0;i<ListaDigi.size();i++)
             ListaDigitadores.add(PersonaBO.findByDNI(ListaDigi.get(i).getIdusuario()+""));
         
         
         int ind=0;
         int menor=100000000;
         for(int i=0;i<ListaDigitadores.size();i++){
             if( ListaDigitadores.get(i).getPadronelectoralList().size() < menor){
                 ind=i;
                 menor=ListaDigitadores.get(i).getPadronelectoralList().size();
             }
         }
         
         Persona digitador=null;
         if (!ListaDigitadores.isEmpty()){
             digitador = ListaDigitadores.get(ind);
             Padron.setIdresponsable(Padron.getIdresponsable());
         }else{
         // no hay digitadores, error
             Mensajes.alerta("No existen digitadores registrados");
             return false;
         }
        
         ArrayList<Paginapadronelectoral> ListaPaginas = new  ArrayList<Paginapadronelectoral> () ;
         
         
         
         ArrayList<Padronelectorallinea > LineasPagina = new ArrayList<Padronelectorallinea > () ;
         //boolean primero=true;
         Paginapadronelectoral PaginaPadron  = new Paginapadronelectoral();
         while((linea=br.readLine())!=null){
             
             linea2=br2.readLine();
             
             StringTokenizer st = new StringTokenizer(linea, ",");
             
             paterno= st.nextToken();
             materno= st.nextToken();
             nombre1= st.nextToken();
             DNI=st.nextToken();
             
             StringTokenizer st2 = new StringTokenizer(linea2, " ");
             imagen=st2.nextToken();
             if(st2.hasMoreTokens())
              huella=st2.nextToken();
             else
                 huella="";
             Padronelectorallinea LineaPadron = new Padronelectorallinea();
             
             /*obtengo mi patron*/
             LineaPadron.setApematerno(materno);
             LineaPadron.setApepaterno(paterno);
             LineaPadron.setDni(DNI);
             LineaPadron.setNombre(nombre1);
             LineaPadron.setIdpadronelectorallinea(0);
             LineaPadron.setPaginapadronelectoral(PaginaPadron);
            // LineaPadron.setIdfirmante(new Persona(DNI));
            //meter la huella y la firma
             String nruta=ruta2;
             ruta2=ruta2.substring(0, ruta.lastIndexOf("/")+1);
             System.out.println(ruta2);
             byte [] imgf = IOmethods.convertFileToByte(ruta2+imagen); 
             LineaPadron.setFirma(imgf);
             
             if(huella!=""){
                byte [] imgh = IOmethods.convertFileToByte(verins.Utils.Comunes.getPathPadronesDigitales()+""+huella); 
                LineaPadron.setFirma(imgh);
             }
             
             LineasPagina.add(LineaPadron);
            
             if(lineapagina==10){
                
                
                 PaginaPadron.setPaginapadronelectoralPK(new PaginapadronelectoralPK(pagina, Padron.getIdpadronelectoral()));
                 //falta informacion de la pagina del padron
                 PaginaPadron.setPadronelectorallineaList(LineasPagina);
                 LineasPagina = new ArrayList<Padronelectorallinea > ();
                 
                 PaginaPadron.setEstado("3");
                 PaginaPadron.setIddigitador(digitador);
                 PaginaPadron.setPadronelectoral(Padron);
                // PaginaPadron.set
                 
                 ListaPaginas.add(PaginaPadron);
                 PaginaPadron  = new Paginapadronelectoral();
                // LineasPagina = null;
                 
                 lineapagina=0;
                 pagina++;
                 if(pagina==3)
                     break;
                 
             }
              lineapagina++;
         }
         Padron.setPaginapadronelectoralList(ListaPaginas);
         
         
         //PadronElectoralBO PadronBO = new PadronElectoralBO();
         Padron.setEstado(new Estadopadron(3));
         PadronElectoralBO.save(Padron,usuario);
         //grabar padron
         return true;
      }
      catch(Exception e){
         e.printStackTrace();
         return false;
      }finally{
         // En el finally cerramos el fichero, para asegurarnos
         // que se cierra tanto si todo va bien como si salta 
         // una excepcion.
         try{                    
            if( null != fr ){   
               fr.close();     
            }                  
         }catch (Exception e2){ 
            e2.printStackTrace();
         }
      }
   }
    private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAceptarActionPerformed
        // TODO add your handling code here:
       
        
        if (txtProceso.getText().equals("")){
            Mensajes.alerta("Debe seleccionar proceso");
            return;
        }
        if (txtPadron.getText().equals("")){
            Mensajes.alerta("Debe elegir un padrón");
            return;
        }
         if (txtImagen1.getText().equals("")){
            Mensajes.alerta("Debe seleccionar un archivo");
            return;
        }
         if(Mensajes.guardar(evt, this))
            if (verins.Utils.Mensajes.exito(leepadron(txtImagen1.getText(),txtImagen2.getText())))
                dispose();
        
    }//GEN-LAST:event_btnAceptarActionPerformed

    private void btnBucarPadrActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBucarPadrActionPerformed
        // TODO add your handling code here:
        if (procesoEle!=null){
            frmBuscarPadrones frm = new frmBuscarPadrones(null,usuario , null);
            frm.setearProcesoBusq(procesoEle);
            frm.setVisible(true);
            padron = frm.padronBusq;
            //NumberFormat formatter = new DecimalFormat("00000"); 
            if(padron!= null){
                if (padron.getPaginapadronelectoralList().isEmpty())
                    txtPadron.setText(padron.getIdpadronelectoral());
                else{
                    Mensajes.alerta("El padrón ya posee firmantes asignados");
                }
            }
        }else{
            Mensajes.alerta("Debe seleccionar un proceso primero");
        }
    }//GEN-LAST:event_btnBucarPadrActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        dispose();
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnBucarProcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBucarProcActionPerformed
        // TODO add your handling code here:
        frmBusquedaProcesoElectoral frm=new frmBusquedaProcesoElectoral(usuario, this);
        frm.setearBotonesBusqueda();
        frm.setearEstadoBusq(new Estadoprocesoelectoral(1));
        frm.setVisible(true);
        procesoEle=frm.proceso;
        if (procesoEle!=null){
            txtProceso.setText(procesoEle.getNombre());
        }
    }//GEN-LAST:event_btnBucarProcActionPerformed

    private void btnBusqArch1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBusqArch1ActionPerformed
        // TODO add your handling code here:
        JFileChooser fileChooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Text", "txt");
        fileChooser.setFileFilter(filter);
        fileChooser.setCurrentDirectory(new File(verins.Utils.Comunes.getPathPadronesDigitales()));
        int status = fileChooser.showOpenDialog(null);
        if (status == JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            txtImagen2.setText(selectedFile.getPath());
            //jPanel1.cargarImagen(txtImagen1.getText());
        } else if (status == JFileChooser.CANCEL_OPTION) {
            txtImagen2.setText("");
        }
    }//GEN-LAST:event_btnBusqArch1ActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnBucarPadr;
    private javax.swing.JButton btnBucarProc;
    private javax.swing.JButton btnBusqArch;
    private javax.swing.JButton btnBusqArch1;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel lblImagen1;
    private javax.swing.JLabel lblImagen2;
    private javax.swing.JLabel lblImagen3;
    private javax.swing.JTextField txtImagen1;
    private javax.swing.JTextField txtImagen2;
    private javax.swing.JTextField txtPadron;
    private javax.swing.JTextField txtProceso;
    // End of variables declaration//GEN-END:variables
}
